var events = require('events'),
    util = require('util'),
    path = require('path'),
    fs = require('fs');

var watchDir = './watch', // 需要监视的目录
    processedDir = './done'; // 处理完放置的目录


function Watcher(watchDir, processDir) {
    this.watchDir = watchDir;
    this.processDir = processDir;
}
util.inherits(Watcher, events.EventEmitter);


// 调用处理方法
Watcher.prototype.watch = function() {
    var watcher = this;
    fs.readdir(this.watchDir, function(err, files) {
        if (err) throw err;
        for (var index in files) {
            watcher.emit('process', files[index]);
        }
    })
};

// 先调用一次处理方法然后监视文件变化
Watcher.prototype.start = function() {
    var watcher = this;
    watcher.watch(); // 一开始就调用一次
    fs.watchFile(watchDir, function() {
        watcher.watch();
    });
};

var watcher = new Watcher(watchDir, processedDir);

// 处理方法
var i = 1;
watcher.on('process', function process(file) {
    let extName = path.extname(file); // 文件后缀名
    let fileName = path.basename(file); // 文件名，包含后缀名
    let fileNameNoExt = path.basename(file, extName); // 文件名，不包含后缀名
    console.log('后缀名', extName)
    console.log('文件名（含后缀）', fileName)
    console.log('文件名（不含后缀）', fileNameNoExt)

    var watchFile = this.watchDir + '/' + file;
    var processedFile = this.processDir + '/' + (i++) +  extName;

    // 删除文件名含有‘副本’的文件
    if(fileName.indexOf('副本') !== -1) {
        fs.unlink(watchFile,(err) => {
            if(err) throw err;
            console.log('成功删除文件',watchFile);
        })
    }else {
        // 重命名文件
        fs.rename(watchFile, processedFile, (err) => {
            if (err) throw err;
            console.log('文件' + watchFile + '重命名为' + processedFile);
        });
    }
});


watcher.start();
console.log('处理中...');